﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Crosland.Automotriz.Facade.Interface;
using Crosland.Automotriz.Facade.Facade;
using System.Configuration;
using Crosland.Automotriz.Core;
using Crosland.Automotriz.Logic.ControlExeption;
using Crosland.Automotriz.Entidad;
using DevExpress.Web.ASPxEditors;
using System.Text;

namespace Crosland.Automotriz.Web.Repuestos
{
    public partial class wFrmProcesarArticulosABCListarDetalle : System.Web.UI.Page
    {
        iFacadeProcesarABC BL_ProcesoABC_Cab = new FacadeProcesarABC();
        string idNegocio = ConfigurationManager.AppSettings["Negocio"];

        private static String ValidaEstado = "N";

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack == false)
            {
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", "JavaScript:confirmSubmitResult();", true);

                if (ValidaEstado == "N")
                {
                    this.ValidaListado();

                }



                lblTitulo.Text = String.Format("Detalle de Proceso ABC  del : {0}", Session["NUM_ANIO_MES"].ToString());
            }


            ListarTipo();
            ListarGrupoArticulo2();
            ListarMarca();


        }




        private void ValidaListado()
        {

            ListarTipo();

            ASPxListBox cboTipo = CboGrupoArticuloSup.FindControl("listBox") as ASPxListBox;
            cboTipo.SelectAll();
            CboGrupoArticuloSup.Text = "Repuestos,LLantas";

            ListarGrupoArticulo2();

            ASPxListBox cboTipo2 = cboGrupoArticulo2.FindControl("listBox2") as ASPxListBox;
            cboTipo2.SelectAll();
            cboGrupoArticulo2.Text = "Acuáticos Kawasaki,Herramientas,Llantas 2 R Bajaj ,Llantas 2 R Falcon,Llantas 3 R Falcon,Llantas 3 R MRF ,Vehículos Bajaj 2 R ,Vehículos Bajaj 3 R ,Vehículos Kawasaki 2,Vehículos Kawasaki 4,Vehículos Yumbo 2 R ,Llantas 3R MTL,Otros 2R,Otros 3R,Otras Llantas";

            ListarMarca();
            ASPxListBox cboTipo3 = cboMarcas.FindControl("listBox3") as ASPxListBox;
            cboTipo3.SelectAll();
            cboMarcas.Text = "(NN),BAJAJ,YUMBO,HONDA,KAWASAKI,DEPREDADOR,DAEWOO";

            ConsultarDetalle();


        }

        protected void btnSalir_Click(object sender, EventArgs e)
        {
            ValidaEstado = "N";
            Response.Redirect("~/Repuestos/wFrmProcesarArticulosABC.aspx?id=" + idNegocio);
        }

        protected void btnConsultar_Click(object sender, EventArgs e)
        {

            ValidaEstado = "M";

            ConsultarDetalle();
        }



        private void ConsultarDetalle()
        {


            StringBuilder valorGrupoArticulos = new StringBuilder();
            StringBuilder valorMarcas = new StringBuilder();

            ASPxListBox idGrupoArticulo = cboGrupoArticulo2.FindControl("listBox2") as ASPxListBox;
            if (idGrupoArticulo != null)
            {

                for (int i = 0; i < idGrupoArticulo.SelectedItems.Count; i++)
                {
                    if (idGrupoArticulo.SelectedValues[i] != null)
                    {
                        String valor = idGrupoArticulo.SelectedValues[i].ToString();
                        valorGrupoArticulos.Append(valor + ",");
                    }
                }
            }

            ASPxListBox idMarcas = cboMarcas.FindControl("listBox3") as ASPxListBox;
            if (idMarcas != null)
            {

                for (int i = 0; i < idMarcas.SelectedItems.Count; i++)
                {
                    if (idMarcas.SelectedValues[i] != null)
                    {
                        String valor = idMarcas.SelectedValues[i].ToString();
                        valorMarcas.Append(valor + ",");
                    }
                }
            }

            String idMarca = valorMarcas.ToString();
            string desGrupo = valorGrupoArticulos.ToString();

            List<procesoABC> lista = BL_ProcesoABC_Cab.listTh_Procesarabc_Det(Convert.ToInt32(Session["nro_proceso"]), idMarca, desGrupo);

            gvListado.DataSource = lista;
            gvListado.DataBind();

            MostrarCantidades(idMarca, desGrupo);

        }


        void ListarTipo()
        {


            try
            {
                ASPxListBox cboTipo = CboGrupoArticuloSup.FindControl("listBox") as ASPxListBox;
                IEnumerable<Object> Tipo = BL_ProcesoABC_Cab.ListarTipo(Convert.ToInt32(Session["nro_proceso"]));
                cboTipo.DataSource = Tipo;
                cboTipo.TextField = "DES_GRUPO_ARTICULO_2";
                cboTipo.ValueField = "DES_GRUPO_ARTICULO_2";
                cboTipo.DataBind();
                ListEditItem l = new ListEditItem() { Text = "Seleccionar Todo", Value = "" };
                cboTipo.Items.Insert(0, l);

                //cboTipo.SelectAll();
                //CboGrupoArticuloSup.Text = "LLantas,Repuestos";

                //ListarGrupoArticulo2();




            }
            catch (Exception ex)
            {

                GuardarExceptionLog(ex.Message, ex, "ListarTipo");
                MensajesError(ex.Message, ex, "ListarTipo");
            }



        }

        

        void ListarGrupoArticulo2()
        {
            try
            {
                String ValorGrupoArticuloSup = CboGrupoArticuloSup.Text;
                ASPxListBox cboTipo2 = cboGrupoArticulo2.FindControl("listBox2") as ASPxListBox;
                IEnumerable<Object> Tipo = BL_ProcesoABC_Cab.listaGrupoArticulo(Convert.ToInt32(Session["nro_proceso"]), ValorGrupoArticuloSup);
                cboTipo2.DataSource = Tipo;
                cboTipo2.TextField = "DES_GRUPO_ARTICULO";
                cboTipo2.ValueField = "ID_GRUPO_ARTICULO";
                cboTipo2.DataBind();
                ListEditItem l = new ListEditItem() { Text = "Seleccionar Todo", Value = "" };
                cboTipo2.Items.Insert(0, l);



            }
            catch (Exception ex)
            {

                GuardarExceptionLog(ex.Message, ex, "ListarGrupoArticulo2");
                MensajesError(ex.Message, ex, "ListarGrupoArticulo2");
            }



        }

        void ListarMarca()
        {

            try
            {
                ASPxListBox cboTipo2 = cboGrupoArticulo2.FindControl("listBox2") as ASPxListBox;
                if (cboTipo2 != null)
                {
                    StringBuilder tex = new StringBuilder();
                    for (int i = 0; i < cboTipo2.SelectedItems.Count; i++)
                    {
                        if (cboTipo2.SelectedValues[i] != null)
                        {
                            String valor = cboTipo2.SelectedValues[i].ToString();
                            tex.Append(valor + ",");
                        }
                    }

                    ASPxListBox cboTipo3 = cboMarcas.FindControl("listBox3") as ASPxListBox;
                    String IdGrupoArticulos = tex.ToString();
                    IEnumerable<Object> Marca = BL_ProcesoABC_Cab.listaMarcaPorIdGrupoArticulo(Convert.ToInt32(Session["nro_proceso"]), IdGrupoArticulos);
                    cboTipo3.DataSource = Marca;
                    cboTipo3.TextField = "DES_MARCA";
                    cboTipo3.ValueField = "ID_MARCA";
                    cboTipo3.DataBind();
                    ListEditItem l = new ListEditItem() { Text = "Seleccionar Todo", Value = "" };
                    cboTipo3.Items.Insert(0, l);

                }
            }
            catch (Exception ex)
            {

                GuardarExceptionLog(ex.Message, ex, "ListarMarca");
                MensajesError(ex.Message, ex, "ListarMarca");
            }



        }

   

        protected void gvListado_PageIndexChanged(object sender, EventArgs e)
        {
            if (ValidaEstado == "N")
            {
                this.ValidaListado();


            }
            else
            {
                ConsultarDetalle();
            }
        }

        protected void MostrarCantidades(String idMarca, String desGrupo)
        {
            List<TD_CANTIDADES_ABC> TipoABC_VAL = BL_ProcesoABC_Cab.TotalABCValorizado(Convert.ToInt32(Session["nro_proceso"]), idMarca, desGrupo);
            List<TD_CANTIDADES_ABC> TipoABC_CAN = BL_ProcesoABC_Cab.TotalABCCantidades(Convert.ToInt32(Session["nro_proceso"]), idMarca, desGrupo);

            lblA.Text = TipoABC_VAL[0].TOTAL.ToString();
            lblB.Text = TipoABC_VAL[1].TOTAL.ToString();
            lblC1.Text = TipoABC_VAL[2].TOTAL.ToString();
            lblC2.Text = TipoABC_VAL[3].TOTAL.ToString();
            lblC3.Text = TipoABC_VAL[4].TOTAL.ToString();
            lblC4.Text = TipoABC_VAL[5].TOTAL.ToString();
            lblC5.Text = TipoABC_VAL[6].TOTAL.ToString();
            lblN.Text = TipoABC_VAL[7].TOTAL.ToString();
            lblO.Text = TipoABC_VAL[8].TOTAL.ToString();

            lblA_CAN.Text = TipoABC_CAN[0].TOTAL.ToString();
            lblB_CAN.Text = TipoABC_CAN[1].TOTAL.ToString();
            lblC1_CAN.Text = TipoABC_CAN[2].TOTAL.ToString();
            lblC2_CAN.Text = TipoABC_CAN[3].TOTAL.ToString();
            lblC3_CAN.Text = TipoABC_CAN[4].TOTAL.ToString();
            lblC4_CAN.Text = TipoABC_CAN[5].TOTAL.ToString();
            lblC5_CAN.Text = TipoABC_CAN[6].TOTAL.ToString();

        }

        protected void btnVerDetalle_Click(object sender, EventArgs e)
        {

            int index = gvListado.FocusedRowIndex;
            Session["ID_MATERIAL"] = Convert.ToInt32(gvListado.GetRowValues(index, "ID_MATERIAL"));
            Session["CODIGO_MATERIAL"] = Convert.ToString(gvListado.GetRowValues(index, "COD_MATERIAL"));
            popupReporte.ShowOnPageLoad = true;


        }

        private void GuardarExceptionLog(String msgUsu, Exception ex, String metError)
        {
            try
            {
                String msgReal, fhError, pagError, codUsu;
                msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
                pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
                codUsu = Session["User"].ToString();
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                int number = 0;
                for (int i = 0; i < trace.FrameCount; i++)
                {
                    System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                    number = sf.GetFileLineNumber();
                }
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                new Logg().ErrorLog(Server.MapPath("~/Logs/ErrorLog.csv"), msgUsu, msgReal, pagError, metError, codUsu, number);
            }
            catch (DataException e) { MensajesError(e.Message, e, "GuardarExceptionLog"); }
            catch (RunException re) { MensajesError(re.Message, re, "GuardarExceptionLog"); }

        }

        private void MensajesError(String msgUsu, Exception ex, String metError)
        {
            Crosland.Automotriz.Web.UserControl.MensajeError uc = (Crosland.Automotriz.Web.UserControl.MensajeError)Master.FindControl("ucErrorMensaje");
            String msgReal, fhError, pagError, codUsu;
            msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
            codUsu = Session["User"].ToString();
            fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
            System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
            int number = 0;
            for (int i = 0; i < trace.FrameCount; i++)
            {
                System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                number = sf.GetFileLineNumber();
            }
            uc.Errores(msgUsu, msgReal, fhError, pagError, metError, codUsu, number);
        }


        protected void btnMostrarDetalleImp_Click(object sender, EventArgs e)
        {
            ValidaEstado = "M";
            ListarGrupoArticulo2();
            ASPxListBox cboTipo2 = cboGrupoArticulo2.FindControl("listBox2") as ASPxListBox;
            cboTipo2.SelectAll();
            cboGrupoArticulo2.Text = "Acuáticos Kawasaki,Herramientas,Llantas 2 R Bajaj ,Llantas 2 R Falcon,Llantas 3 R Falcon,Llantas 3 R MRF ,Vehículos Bajaj 2 R ,Vehículos Bajaj 3 R ,Vehículos Kawasaki 2,Vehículos Kawasaki 4,Vehículos Yumbo 2 R ,Llantas 3R MTL,Otros 2R,Otros 3R,Otras Llantas";
            
        }

        protected void btnMostrarMarca_Click(object sender, EventArgs e)
        {
            ValidaEstado = "M";
            ListarMarca();
            ASPxListBox cboTipo3 = cboMarcas.FindControl("listBox3") as ASPxListBox;
            cboTipo3.SelectAll();
            cboMarcas.Text = "(NN),BAJAJ,YUMBO,HONDA,KAWASAKI,DEPREDADOR,DAEWOO";

            
        }

        protected void btnXlsExport_Click(object sender, EventArgs e)
        {
            if (ValidaEstado == "N")
            {
                this.ValidaListado();


            }
            else
            {
                ConsultarDetalle();
            }



            gridExport.WriteXlsToResponse();
        }

        protected void gvListado_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            if (ValidaEstado == "N")
            {
                this.ValidaListado();


            }
            else
            {
                ConsultarDetalle();
            }



        }


    }
}